package com.cheetah.start.module.system.domain;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.cheetah.start.common.config.property.UpLoadProperty;
import com.cheetah.start.common.enums.FileStatusEnum;
import com.cheetah.start.common.utils.MyFileUtil;
import com.cheetah.start.common.utils.MySystemUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;

/**
 * @author xjh
 * @create 2021/7/4
 **/
@Data
@Accessors(chain = true)
@TableName(value = "sys_file")
public class SysFile {

    @TableId(value = "file_id")
    private Integer fileId;

    /**
     * 文件名
     */
    private String fileName;

    /**
     * 文件现文件名
     */
    private String fileNowName;

    /**
     * 文件大小
     */
    private Integer fileSize;

    /**
     * 文件存放路径
     */
    private String fileRealPath;

    /**
     * 存在的状态
     */
    @TableField(exist = false)
    private String existStatus;

    /**
     * 文件全路径
     */
    private String filePath;

    /**
     * 文件一半路径
     */
    private String fileUrl;

    /**
     * 文件状态
     */
    private String fileStatus;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;

    public static SysFile getFile(MultipartFile file, UpLoadProperty upLoadProperty, String suffix) {
        // 原文件名
        String originalFilename = file.getOriginalFilename();
        // 生成文件名
        String generateFileName = MyFileUtil.getDateFileName(file);
        // 本地路径
        String fullPath = upLoadProperty.getPath() + generateFileName;
        if (MySystemUtil.isWin()) {
            fullPath = fullPath.replace(StrUtil.SLASH, StrUtil.BACKSLASH);
        } else {
            fullPath = fullPath.replace(StrUtil.BACKSLASH, StrUtil.SLASH);
        }
        SysFile sysFile = new SysFile();
        sysFile.setFileSize((int) (file.getSize() / 1000))
                .setFileName(originalFilename)
                // 访问全路径
                .setFilePath(MyFileUtil.getHostFullName(suffix, upLoadProperty.getProfileHost(), generateFileName))
                // 上传后文件名
                .setFileNowName(MyFileUtil.getNowNameByGenerateName(generateFileName))
                // 访问半路径
                .setFileUrl(MyFileUtil.getHostHalfPath(suffix, generateFileName))
                // 文件保存路径
                .setFileRealPath(fullPath)
                .setCreateTime(new Date())
                .setFileStatus(FileStatusEnum.USE.getCode());
        return sysFile;
    }
}
